#ifndef TIMER_MANAGER_H
#define TIMER_MANAGER_H

#include "common.h"
#include "utils/cron_parser.h"
#include "event_loop.h"

// 定时器任务类型
typedef enum {
    TIMER_TYPE_INTERVAL,    // 间隔定时器
    TIMER_TYPE_CRON,        // Cron表达式定时器
    TIMER_TYPE_ONESHOT      // 一次性定时器
} timer_type_t;

// 定时器状态
typedef enum {
    TIMER_STATUS_ACTIVE,    // 活跃
    TIMER_STATUS_PAUSED,    // 暂停
    TIMER_STATUS_COMPLETED, // 完成
    TIMER_STATUS_ERROR      // 错误
} timer_status_t;

// 定时器任务
typedef struct timer_task {
    char *name;                    // 任务名称
    timer_type_t type;            // 任务类型
    timer_status_t status;        // 任务状态
    
    // 定时配置
    union {
        struct {
            int interval_ms;      // 间隔时间(毫秒)
        } interval;
        struct {
            char *cron_expression; // Cron表达式
            cron_expr_t *cron_expr; // 解析后的Cron表达式
            char *timezone;        // 时区
        } cron;
        struct {
            time_t execute_time;   // 执行时间
        } oneshot;
    } config;
    
    // 执行信息
    timer_callback_t callback;     // 回调函数
    void *callback_arg;           // 回调参数
    time_t last_executed;         // 最后执行时间
    time_t next_execution;        // 下次执行时间
    int execution_count;          // 执行次数
    int max_executions;           // 最大执行次数(-1表示无限)
    
    // 错误处理
    int error_count;              // 错误计数
    int max_errors;               // 最大错误数
    time_t last_error;            // 最后错误时间
    
    struct timer_task *next;
} timer_task_t;

// 定时器管理器
typedef struct {
    timer_task_t *tasks;          // 任务链表
    pthread_mutex_t mutex;        // 互斥锁
    pthread_t thread;             // 工作线程
    bool running;                 // 运行状态
    event_loop_t *event_loop;     // 事件循环
    int check_interval_ms;        // 检查间隔(毫秒)
    int total_tasks;              // 总任务数
    int active_tasks;             // 活跃任务数
} timer_manager_t;

// 定时器管理器API
int timer_manager_init(timer_manager_t *timer, event_loop_t *event_loop);
int timer_manager_set_check_interval(timer_manager_t *timer, int interval_ms);

// 任务管理
int timer_manager_add_interval_task(timer_manager_t *timer, const char *name, 
                                   int interval_ms, timer_callback_t callback, 
                                   void *arg, int max_executions);
int timer_manager_add_cron_task(timer_manager_t *timer, const char *name, 
                               const char *cron_expression, timer_callback_t callback, 
                               void *arg, int max_executions);
int timer_manager_add_oneshot_task(timer_manager_t *timer, const char *name, 
                                  time_t execute_time, timer_callback_t callback, 
                                  void *arg);
int timer_manager_remove_task(timer_manager_t *timer, const char *name);
int timer_manager_pause_task(timer_manager_t *timer, const char *name);
int timer_manager_resume_task(timer_manager_t *timer, const char *name);
int timer_manager_update_task(timer_manager_t *timer, const char *name, 
                             void *new_config, timer_type_t type);

// 状态查询
timer_task_t *timer_manager_find_task(timer_manager_t *timer, const char *name);
int timer_manager_get_task_count(timer_manager_t *timer);
int timer_manager_get_active_task_count(timer_manager_t *timer);
json_t *timer_manager_get_task_status(timer_manager_t *timer, const char *name);
json_t *timer_manager_get_all_tasks_status(timer_manager_t *timer);

// 控制函数
void timer_manager_start(timer_manager_t *timer);
void timer_manager_stop(timer_manager_t *timer);
void timer_manager_destroy(timer_manager_t *timer);

// 工具函数
const char *timer_type_to_string(timer_type_t type);
const char *timer_status_to_string(timer_status_t status);

#endif
